package com.fzk.blog.blog.service.impl;

import com.fzk.blog.bean.Blog;
import com.fzk.blog.blog.service.IRedisService;
import com.fzk.blog.blog.service.ITimeLineService;
import com.fzk.blog.mapper.BlogMapper;
import com.fzk.blog.utils.MyJsonUtil;
import com.fzk.blog.utils.ResponseResult;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

/**
 * @author fzk
 * @date 2021-08-23 20:45
 */
@Service
public class TimeLineService implements ITimeLineService {
    @Resource
    private BlogMapper blogMapper;

    @Override
    public List<List<List<Blog>>> getBlogTimeLine() {
        List<List<List<Blog>>> blog_timeLine = new LinkedList<>();// 所有博客的最外层容器
        List<List<Blog>> blog_year = null;// 每一年的博客的外层容器
        List<Blog> blog_month = null;// 每个月的博客的内层容器
        Set<String> yearSet = new HashSet<>();//年收纳盒
        Set<String> monthSet = new HashSet<>();// 月收纳盒
        // 1.先按时间降序搜索出blog列表
        List<Blog> blogs = blogMapper.getBlogTimeLine();
        for (Blog blog : blogs) {
            String year = blog.getPublishDate().substring(0, 4);
            String month = blog.getPublishDate().substring(5, 7);

            // 2.1 先判断年
            if (!yearSet.contains(year)) {// 新的一年到来
                yearSet.add(year);//加入这一年
                monthSet.clear();//清空月份收纳盒
                blog_year = new LinkedList<>();//新建一个年度博客容器
                blog_timeLine.add(blog_year);//将此年度容器放入外层容器中
            }
            // 2.2 再判断月
            if (!monthSet.contains(month)) {// 新的一月到来
                monthSet.add(month);// 加入这一月
                blog_month = new LinkedList<>();//新建一个月度博客容器
                blog_year.add(blog_month);//将此月度容器放入年度容器中
            }

            // 2.3 博客放入月度博客容器中
            blog_month.add(blog);
        }
        return blog_timeLine;
    }
}
